//go:build amd64 || arm64
// +build amd64 arm64

package main

import (
	"fmt"
	"reflect"
	"sort"
	"unsafe"
)

// 数组，字符串，切片
func main() {
	fmt.Println("\xe4\xb8\x96")                   // 打印“世”
	fmt.Println("\xe7\x95\x8c")                   // 打印“界”
	fmt.Println("\uFFFD")                         // 打印“界”
	fmt.Printf("%#v\n", []rune("世界"))             // []int32{19990, 30028}
	fmt.Printf("%#v\n", string([]rune{'世', '界'})) // 世界
}

var a = []float64{4, 2, 5, 7, 2, 1, 88, 1}

func SortFloat64FastV1(a []float64) {
	// 强制类型转换
	var b []int = ((*[1 << 20]int)(unsafe.Pointer(&a[0])))[:len(a):cap(a)]
	// 以int方式给float64排序
	sort.Ints(b)
}

func SortFloat64FastV2(a []float64) {
	// 通过reflect.SliceHeader更新切片头部信息实现转换
	var c []int
	aHdr := (*reflect.SliceHeader)(unsafe.Pointer(&a))
	cHdr := (*reflect.SliceHeader)(unsafe.Pointer(&c))
	*cHdr = *aHdr
	// 以int方式给float64排序
	sort.Ints(c)
}
